import java.util.*;                 //加载包，要用到其中的LinkedList和ArrayList类 
class RentBookManage       //定义一个名为RentBookManage的类
{
    /*1. 定义必要的成员变量*/
    static final int deadTime=10;    //静态类常量，租阅期限，运行中不可修改（也可去掉final改为可修改的类变量）
    double normalRent=0.1;   //实例变量，正常租阅费率
    double delayRent=1.0;    //实例变量，超期租阅费率
    int rentDays;                              //租阅天数
    double rent;                              //租阅费用
    RentBook rentedbook;             //被租阅之书
    VIPReader renter;                     //租书的读者

    LinkedList<RentBook> booklist;   //用于存储多本书对象的泛型链表
    ArrayList<VIPReader> readerlist; //用于存储多个读者对象的泛型顺序表
    ArrayList<String> rentlist;            //用于存储租阅记录的泛型顺序表
    int j;         //循环变量

    /*2. 定义构造方法*/
    RentBookManage()      //定义构造方法，初始化图书及读者信息存储表
    {
        booklist=new LinkedList<RentBook>();    //初始化图书链表
        readerlist=new ArrayList<VIPReader>();  //初始化读者顺序表
        rentlist=new ArrayList<String>();             //初始化租阅记录顺序表
    }

    /*3.  定义几个访问属性的成员方法 */
    static double getDeadTime()          //类方法，获取租阅期限 
    {
        return deadTime;
    }
    void setNormalRent(double newNR) //实例方法，修改正常租阅费率
    {
        normalRent=newNR;
    }
    double getNormalRent()          //实例方法，获取正常租阅费率
    {
        return normalRent;
    }
    void setDelayRent(double newDR) //实例方法，修改超期租阅费率
    {
        delayRent=newDR;
    }
    double getDelayRent()          //实例方法，获取超期租阅费率
    {
        return delayRent;
    }

    /*4. 定义实现图书信息管理功能的成员方法*/
    void addBook(String isbn,String bname,String bauthor,String bpublisher,double
            bprice,String no) //图书入库
    {
        booklist.add(new RentBook(isbn,bname,bauthor,bpublisher,bprice,no));  //将新
    }
    void addBook(int i,String isbn,String bname,String bauthor,String bpublisher,double
            bprice,String no) //重载图书入库方法
    {
        booklist.add(i,new RentBook(isbn,bname,bauthor,bpublisher,bprice,no)); //在指
    }
    void searchBook(String bookName)  //图书查询：按书名查询
    {
        boolean flag=false;
        for( j=0;j<booklist.size();j++)
        {
            if(booklist.get(j).getBookName().equals(bookName))
            {
                System.out.println(booklist.get(j));
                flag=true;
            }
        }
        if(flag==false)
            System.out.println("没有找到指定的书。");
    }
    void editBook(String bookName,double bprice)     //图书修改：按书名修改定价 
    {
        for( j=0;j<booklist.size();j++)
        {
            if(booklist.get(j).getBookName().equals(bookName))
            {
                booklist.get(j).setPrice(bprice);            //修改定价
                System.out.println(booklist.get(j));      //提取修改后信息
            }
        }
    }
    void deleteBook(String bookName)              //图书删除：按书名删除
    {
        for( j=0;j<booklist.size();j++)
        {
            if(booklist.get(j).getBookName().equals(bookName))
            {
                booklist.remove(j);                  //删除该书
                System.out.println("成功删除该书。");
            }
        }
    }
    void displayBook()                          //输出图书清单
    {
        for(RentBook  b : booklist)                    //用增强for循环逐条列出
        {
            System.out.println(b);
        }
    }

    /*5. 定义读者信息添加和输出的成员方法*/
    void addReader(String name,String grade)   //创建不同身份的读者
    {
        readerlist.add(new VIPReader(name,grade));  //将新读者插在表尾
    }
    void displayReader()                         //输出读者清单 
    {
        for(VIPReader  r : readerlist)                //用增强for循环逐条列出
        {
            System.out.println(r);
        }
    }
    /*6. 定义租阅业务相关的成员方法*/
    double setRent()                              //计算租阅总费用 
    {
        if(rentDays<=deadTime)
            rent=rentDays*normalRent*renter.getPencent() ;      //在规定期限内按正常租阅费率计算

     else
        rent=((rentDays-deadTime)*delayRent+deadTime*normalRent)*renter.getPencent(); //超
        return rent;
    }
    boolean renting( )             //实例方法：支付租金 
    {
        setRent();                        //调用计算租金的方法
        if( renter.payRent(rent)) //判断账户余额是否够支付租金
        {
            System.out.println(renter.getReaderName()+"支付租金:"+rent+"成功！");
            return true;
        }
        else
        {
            System.out.println(renter.getReaderName()+"的账号余额="+renter.getBalance()
                    +"不够支付租金"+rent);
            return false;
        }
    }
    void rentBook(RentBook bk,VIPReader rd,int days) //图书租阅方法
    {
        rentedbook =bk;
        renter =rd;
        rentDays=days;
        if( renting( ))                   //调用计算租方法金，当余额够支付租金时则添加该租阅记录 
            rentlist.add(renter.getReaderName()+" 借阅的图书是： "+rentedbook.getBookName()+" | "+
                    rentedbook.getBookNo()+"，账号余额="+renter.getBalance() );
    }
    void displayRentInfo()         //输出租阅信息
    {
        for(String  br : rentlist)                 //用增强for循环逐条列出
        {
            System.out.println(br);
        }
    }
}